package br.ufrj.dcc.ia.jogadores;

import java.util.Random;

import br.ufrj.dcc.ia.blackjack.Rodada;
import br.ufrj.dcc.ia.excecoes.PartidaException;

public class AgenteAleatorio extends Player {

	public AgenteAleatorio(String nome, Boolean martingale) {
		super(nome);
		this.martingale = martingale;
	}

	@Override
	public void apostar() {
		if (martingale) {
			apostaMartingale();
		} else {
			int[] possiveisApostas = { 5, 10, 25, 50, 100 };
			Random randomGenerator = new Random();
			int randomInt = randomGenerator.nextInt(possiveisApostas.length);
			if (possiveisApostas[randomInt] > this.dinheiro) {
				this.setAposta(this.dinheiro);
			} else {
				this.setAposta(new Double(possiveisApostas[randomInt]));
			}
		}
		this.dinheiro -= this.aposta;
	}

	@Override
	public boolean jogar(Rodada rodada) throws PartidaException {
		Random randomGenerator = new Random();
		Boolean jogando = true;
		// Verifica se estourou . Ou seja , recebeu 2 A's
		if (this.getPontuacaoCorrente() > 21) {
			System.out.println(this.nome + " estourou!");
			this.incDerrotas();
			return false;
		}
		while (jogando) {
			try {
				Thread.sleep(500);
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			int randomInt = randomGenerator.nextInt(4);
			if((randomInt == 1) && (this.dinheiro - this.aposta < 0)){
				randomInt = 0;
			}
			switch (randomInt) {
			// Hit
			case (0):
				System.out.println(nome + " deu Hit.");
				this.hit(rodada.getBaralho());
				// Verifica se estourou.
				if (this.getPontuacaoCorrente() > 21) {
					System.out.println(this.nome + " estourou!!");
					this.incDerrotas();
					this.perdeuUltima = true;
					return false;
				}
				break;
			// DoubleHit
			case (1):
				System.out.println(this.nome + " deu Double.");
				this.doubleHit(rodada.getBaralho());
				if (this.getPontuacaoCorrente() > 21) {
					System.out.println(this.nome + " estourou!!");
					this.incDerrotas();
					this.perdeuUltima = true;
					return false;
				} else
					return true;

				// Surrender
			case (2):
				System.out.println(this.nome + " deu Surrender.");
				this.surrender();
				this.perdeuUltima = false;
				return false;

				// Stand
			case (3):
				System.out.println(this.nome + " deu Stand.");
				this.stand();
				return true;
			}
		}

		return true;
	}
}
